perm filename FILLER.F4[IRC,LCS] blob
sn#496781 filedate 1980-02-02 generic text, type T, neo UTF8
****** FILLER, HGHT, MISS, HALF ********
C Q AND R ARE X,Y COORDS. NE(1)=WDCNT. OTHER NE'S HAVE 3
C FOR INVIS. VECTORS. M=VERTICAL SCAN LINES
SUBROUTINE FILLER(Q,R,NE,M)
DIMENSION Q(1),R(1),NE(1)
KK=NE(1)
KJ=2
DO 4 K=2,KK
IF(NE(K).NE.3)GO TO 11
NE(K)=-1
KJ=K+1
GO TO 4
11 NE(K)=0
4 CONTINUE
RLFT=10000
RT=-10000
B=RT
DO 12 K=1,KK
H=IFIX(Q(K))
IF(H.LT.RLFT)RLFT=H
C FINDS LEFT AND RIGHT LIMITS.
IF(H.GT.RT)RT=H
IF(H.EQ.B)NE(K)=-1
C FINDS VERTICAL LINES.
B=H
Q(K)=H
12 R(K)=IFIX(R(K))
NE(KK+1)=-1
C FINDS JUMPS
LRT=RT
JA=3
124 LEFT=RLFT
51 J=LEFT
42 RJ=J+.001
JCONT=0
LEFT=J
C NEXT LOOKS TO SEE IF 'ALT' IS HIGHEST AVAILABLE POINT.
JJ=-1
ALT=-10000.
200 DO 45 L=2,KK
IF(NE(L).NE.0)GO TO 45
C PASSES ANY LINE THAT HAS BEEN USED FOR ↑ OR ↓ SO FAR.
C NE=-1 ↓; =1 ↑;
IF(MISS(L,RJ,Q))GO TO 45
C FINDS HIGHEST UNUSED LINE UNDER J
H=HGHT(L,RJ,Q,R)
IF(H.LT.ALT)GO TO 45
ALT=H
JJ=L
45 CONTINUE
IF(JJ)GO TO 43
C DID NOT FIND A NEW LINE TO USE.
JCONT=-1
LEFT=J
46 JA=3
JORD=-1
52 KN=Q(JJ)
KL=Q(JJ-1)
IF(KN.LT.KL)KN=KL
50 I=J
102 RJ=I+.01
ALT=HGHT(JJ,RJ,Q,R)
C MAKE I,M,J,LEFT ETC. FLOATING PT.
C NEXT FINDS HIGHEST POINT TO DRAW TO.
B=-10000
JK=-1
XALT=ALT+.001
ZALT=ALT
400 DO 47 L=2,KK
IF(L.EQ.JJ.OR.MISS(L,RJ,Q).OR.NE(L).LT.0)GO TO 47
H=HGHT(L,RJ,Q,R)
IF(H.GT.XALT)GO TO 47
IF(H.LE.B)GO TO 47
B=H
C FINDS HIGHEST POINT.
JK=L
47 CONTINUE
IF(JK)GO TO 48
ALT=ALT-1
300 IF(ZALT-B.GT..001.OR.I.NE.J)GO TO 59
JX=Q(JK)
IF(JX.GT.KN)GO TO 60
JX=Q(JK-1)
IF(JX.LT.KN)GO TO 59
60 L=JJ
JJ=JK
JK=L
KN=JX
C REVERSES ROLE OF LINES IF 2ND IS LONGER.
59 B=B+1
IF(JORD)GO TO 103
H=B
B=ALT
ALT=H
IF(JK.NE.NK.AND.ABS(ALT-B).GT.5.)JA=3
103 CALL LINES(RJ,ALT,JA)
100 CALL LINES(RJ,B,2)
NK=JK
C FOR CHANGES AT END POINTS OF LINES.
JORD=-JORD
C JORD IS TO AVOID DIAGONAL LINES IN FILLER.
NE(JK)=1
NE(JJ)=-1
JA=2
I=I+M
IF(I.LT.KN)GO TO 102
L=1
IF(KN.EQ.KL)L=-1
JJ=JJ+L
J=0
IF(L)J=-1
C FIGURES OUT DIRECTION OF NEXT LINE SEG.
IF(KN+M.GT.Q(JJ+J).OR.JJ.GT.KK.OR.NE(JJ).NE.0)GO TO 124
J=I
GO TO 52
48 JA=3
43 J=LEFT+M
C M IS SET IN FILLMS
IF(J.LE.LRT)GO TO 42
IF(JCONT)GO TO 51
C GOES BACK TO LOOK FOR MORE.
END
FUNCTION HGHT(J,A,Q,R)
DIMENSION Q(1),R(1)
B=R(J-1)
D=Q(J-1)
F=Q(J)
HGHT=((R(J)-B)*(A-D))/(F-D)+B
IF(F.EQ.D)HGHT=B
END
FUNCTION MISS(J,A,Q)
DIMENSION Q(1)
B=Q(J)
C=Q(J-1)
MISS=-1
IF((A.LT.C.AND.A.GT.B).OR.(A.LT.B.AND.A.GT.C))MISS=0
END
C MISS=-1, HIT=0